package com.ufaud.ais.pub.dao;

import java.util.List;

import com.ufaud.ais.pub.view.PageBean;

/**
 * 功能：Dao层泛型查询接口
 * <dl>
 * 		<dd>&lt;T&gt; 返回结果的类型</dd>
 * 		<dd>&lt;P&gt; 代表查询参数的封装类型，一般为Entity、Entity的子类或者Map</dd>
 * </dl>
 * 
 * @author 林可
 * @version 1.0 2010-8-6
 */
public interface IGenericQryDao<T, P> {
	
    /**
     *	<p>通过查询返回列表：</p>
     *		<ul>
     *			<li>GenericQryDaoHibernate将此接口实现为命名查询，参数：
     *				<ol>
     *					<li>queryName - 查询名称</li>
     *					<li>paramObject - Map<String, Object> 查询参数</li>
     *				</ol>
     *			</li>
     *			<li>GenericQryDaoIBatis将此接口实现为iBATIS查询 参数：
     *				<ol>
     *					<li>queryName - 查询名称</li>
     *					<li>paramObject - Map 或者 Entity 查询参数</li>
     *				</ol>
     *			</li>
     * </ul>
     *
     * @return a list of the records found
     */
    List<T> findByNamedQuery(String queryName, P paramObject);

    /**
      *	<p>通过查询返回列表：</p>
     *		<ul>
     *			<li>GenericQryDaoHibernate将此接口实现为命名查询，参数：
     *				<ol>
     *					<li>queryName - 查询名称</li>
     *					<li>paramObject - Map<String, Object> 查询参数</li>
     *					<li>pageIndex - 当前页码</li>
     *					<li>pageSize - 每页大小</li>
     *				</ol>
     *			</li>
     *			<li>GenericQryDaoIBatis将此接口实现为iBATIS查询 参数：
     *				<ol>
     *					<li>queryName - 查询名称</li>
     *					<li>paramObject - Map 或者 Entity 查询参数</li>
     *					<li>pageIndex - 当前页码</li>
     *					<li>pageSize - 每页大小</li>
     *				</ol>
     *			</li>
     * </ul>
     *
     * @return a list of the records found wrapped with pageBean
     */
    PageBean<T> findPageByNamedQuery(String queryName, P paramObject, int pageIndex, int pageSize);
}
